/** -----------------------------------Ccay.Component.Enum------------------------- */
/**
 * Enum基础数据 帮助方法
 * @type
 */
var Enum = {
		/**
		 * 导入枚举类型
		 * @param {string}  enumTypes 逗号分隔的多个枚举类型 必须传递
		 */
		import : function(enumTypes){
			var types = enumTypes.split(",");
			$.each(types, function(index, item){
				Enum._import(item);
			});
		},
		/**
		 * 导入枚举类型
		 * @param {string}  enumType 枚举类型 必须传递
		 */
		_import : function(enumType){
			var enumItems = Ccay.Component.Enum.getList(enumType);
			$.each(enumItems, function(index, item){
				if(item.source === "SourceCode"){
					Enum[item.type] = Enum[item.type] || {};
					Enum[item.type][item.name] = item.value;
				}
			});
		}
};

Ccay.Component.Enum = {
	storageData:{maps:{},keys:[]},
	setTimeoutId:null,
	/**
	 * 统一接口得到Enum基础数据项集合，常用于显示在combobox中
	 * @param {string}  code classifyCode 必须传递
	 * @param {function} callback 回调函数
	 */
	getListOneRequest : function(code,language,callback) {
		if(!callback){
			return;
		}
		this.reset();
		language = language || workspaceVO.currentLanguage;
		var cacheKey = "" + code + "_&_" + language;
		var cache= Ccay.Cache.get("enum")||{};
		Ccay.Cache.put("enum",cache);
		var datas = cache[cacheKey];
		if (!datas) {
			function ajaxByLang(sdName,tId,url){
				if(Ccay.Component.Enum[sdName].maps[code]){
					Ccay.Component.Enum[sdName].maps[code].callbacks.push(callback);
				}else{
					Ccay.Component.Enum[sdName].maps[code] = {
						cacheKey:cacheKey,
						callbacks:[callback]
					};
					Ccay.Component.Enum[sdName].keys.push(code);
				}
				clearTimeout(Ccay.Component.Enum[tId]);
				Ccay.Component.Enum[tId] = setTimeout(function(){
					var storage = Ccay.Component.Enum[sdName];
					Ccay.Component.Enum[sdName] = {maps:{},keys:[]};
					Ccay.Core.ajax({
						url : url.formatURI(storage.keys.join(",")),
						loading:false,
						success : function(data) {
							$.each(storage.keys,function(i,key){
								$.each(storage.maps[key].callbacks,function(i,cb){
									cb(data[key]);
								});
								cache[storage.maps[key].cacheKey] = data[key];
							});
						},
						error : function() {
							Ccay.Core.log("enum 数据查询失败")
						}
					})
				},200);
			}
			ajaxByLang('storageData','setTimeoutId', "services/ccay/enums/itemquery/list/"+ code+"/"+language);
		}else{
			callback(datas);
		}
	},

	/**
	 * 得到enum基础数据项集合，常用于显示在combobox中
	 * @param {string}  code classifyCode 必须传递
	 */
	getList : function(code,language){
		this.reset();
		language = language || workspaceVO.currentLanguage;
		var cacheKey = "" + code + "_&_" + language;
		var cache= Ccay.Cache.get("enum")||{};
		Ccay.Cache.put("enum",cache);
		var datas = cache[cacheKey];
		if (!datas) {
			Ccay.Core.ajax({
				url : "services/ccay/enums/itemquery/list/"+ code+"/"+language,
				async : false,
				success : function(data) {
					datas = data || [];
					cache[cacheKey] = datas;
				},
				error : function() {
					Ccay.Core.log("enum 数据查询失败")
				}
			})
		}
		return datas;
	},

	/**
	 * 得到一个map，用于grid中的列渲染
	 * @param {}code
	 * @param {} parentItemCode
	 */
	getMap : function(code,language) {
		this.reset();
		language = language || workspaceVO.currentLanguage;
		var cacheKey = "" + code + "_&_" + language;
		var cache= Ccay.Cache.get("enum_map")||{};
		Ccay.Cache.put("enum_map",cache);
		var map = cache[cacheKey];
		// 如果没找到map，并且没有找到缓存数据则重新请求查询,并生成map
		if (!map) {
			map = {};
			var datas = Ccay.Cache.get("enum")[cacheKey]
					|| this.getList(code, parentItemCode, language);
			for (var i = 0; i < datas.length; i++) {
				map[datas[i].itemCode] = datas[i].itemName;
			}
			cache[cacheKey] = map;
		}
		return map;
	},
	/**
	 * 清空enum缓存数据，算是初始化
	 */
	clear : function() { 
		Ccay.Cache.put("enum", {});
		Ccay.Cache.put("enum_map", {});
	},
	
	reset:function(){
		if(!Ccay.Cache.get("enum_map")){
			Ccay.Cache.put("enum_map", {});
		}
		if(!Ccay.Cache.get("enum")){
			Ccay.Cache.put("enum", {});
		}
	}

};
